![AWS RDSでリードレプリカが作成できない場合の対処について](https://devio2023-media.developers.io/wp-content/uploads/2019/05/amazon-rds.png)
AWS RDSでリードレプリカが作成できない場合の対処について
困っていた内容
AWS コンソールより AWS RDS のリードレプリカを作成しようとしましたが、グレーアウトされていてできませんでした。 どうすれば良いでしょうか。
個人検証環境にて再現
どう対応すればいいの?
環境を確認したところ、自動バックアップが無効になっていました。
リードレプリカを作成する際、Amazon RDS はソース DB インスタンスの DB スナップショットを取得し、レプリケーションを開始します。 そのため、データベースの自動バックアップが無効になっているとリードレプリカの作成ができません。 リードレプリカを作成するためには、データベースのバックアップ保持期間を0以外の値に設定することで、自動バックアップを有効にする必要があります。
自動バックアップを有効にしたデータベースにて、無事リードレプリカが作成されました。
リードレプリカとは?
あらためてリードレプリカとは何かについて記載します。
一般的にはサーバの負荷が高まっている場合は、スケールアップ(サーバ自体のスペックを上げる)もしくはスケールアウト(サーバの処理台数を増やす)を考えます。 スケールアップは一台のサーバのスペック増のため、限界があります。 RDSのようなRelationalデータベースの場合、データの一貫性と可用性を保証したいので、単純にスケールアウトを考えるのは難しくなります。
参考: CAP定理
そこで、データの読み取りを専門に行う「リードレプリカ」というデータベースをプライマリDBインスタンスのスナップショットから作成します。 リードレプリカが読み取りを処理をすることで、プライマリDBインスタンスの負荷を下げることができるように設定します。 つまり、リードレプリカは、読み取り専用接続のみ許可される DB インスタンスとなります。 高可用性のために、スタンバイレプリカを持たせるマルチAZ構成も設定できます。
スタンバイレプリカとのレプリケーションは同期的です。 リードレプリカは、プライマリDBインスタンスに行った更新を非同期的にコピーします。
図にすると以下のイメージです。
リードレプリカは特に読み取り集中型のワークロードの負荷を下げるのに有効です。 プライマリDBに障害が発生した場合には、昇格もできます。(非同期コピーであることに注意した上での利用が可能です)
関連情報
- RDS リードレプリカの説明に関しての詳細は以下をご参照ください。